package com.qf.auth.service.impl;

import com.qf.auth.feign.CheckCodeFeign;
import com.qf.auth.feign.TenantFeign;
import com.qf.auth.service.TenantService;
import com.qf.common.bean.R;
import com.qf.common.dto.TenantDto;
import com.qf.common.model.QfTenant;
import com.qf.common.utils.IdWorker;
import com.qf.common.utils.JwtUtil;
import com.qf.common.utils.QfUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.UUID;

/**
 * @author 千锋健哥
 */
@Service
public class TenantServiceImpl implements TenantService {

    @Autowired
    private CheckCodeFeign checkCodeFeign;

    @Autowired
    private TenantFeign tenantFeign;

    @Override
    public R register(TenantDto dto) {
        //1. 根据手机号, 获取redis中存储的验证码
        R result = checkCodeFeign.getCode(dto.getPhone());
        if (result.isOk()) {
            //2. 如果验证码正确, 进行注册业务流程
            if (result.getMessage().equals(dto.getCode())) {
                //将dto转换成pojo实体
                QfTenant tenant = new QfTenant();
                dto.convertDtoToDo(tenant);

                //生成唯一id
                IdWorker idWorker = new IdWorker();
                long id = idWorker.nextId();
                tenant.setId(String.valueOf(id));

                //密码使用md5加密
                tenant.setPwd(QfUtil.md5(tenant.getPwd()));

                //设置是否可用状态为1, 可用
                tenant.setEnable(1);

                //设置创建时间
                tenant.setCreateTime(new Date());

                //设置更新时间
                tenant.setUpdateTime(new Date());

                //设置accessKey, 默认accessKey等于主键id
                tenant.setAccessKey(String.valueOf(id));

                //设置accessSecurit秘钥, 默认秘钥使用UUID随机字符串
                tenant.setAccessSecurit(UUID.randomUUID().toString().replace("-", ""));

                //设置默认审核状态, 0待审核
                tenant.setAuditStatus(0);

                //将租户进行保存
                tenantFeign.add(tenant);
                return R.ok(tenant);
            }
        }
        return R.fail("验证码错误");
    }

    @Override
    public R login(TenantDto dto) {
        dto.setPwd(QfUtil.md5(dto.getPwd()));
        R<List<QfTenant>> resultList = tenantFeign.findTenantAll(dto);
        if (resultList.getData() != null && resultList.getData().size() > 0) {
            QfTenant tenant = resultList.getData().get(0);

            //生成jwt也就是token令牌返回给前端
            String jwt = JwtUtil.createJWT(UUID.randomUUID().toString(), tenant.getId(), null);
            return R.ok(jwt);
        } else {
            return R.fail("用户名或者密码错误!");
        }
    }

}
